package top.jojoace.JPA.model_DDL.Convert;

import com.fasterxml.jackson.core.type.TypeReference;
import top.jojoace.JPA.util.GenericAndJson;
import top.jojoace.JPA.util.ListAndJSON;
import top.jojoace.JPA.util.MapAndJson;
import top.jojoace.demo.POJO.User;

import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Entity
public class ModelItem {
    @Id
    private Long id;
    private String img;
    private String title;

    /**
     * @Convert(converter = MapAndJson.class) 转换类
     * 映射至数据库JSON类型
     *
     * {
     *     "episode":"第四十五集",
     *     "context":"天灰蒙蒙的，林氏总裁打开车窗，看到了青青。。。。.",
     *     "message":"落魄总裁与青春少女。"
     * }
     */
    @Convert(converter = MapAndJson.class)
    private Map<String,Object> test;//文章

    /**
     * @Convert(converter = MapAndJson.class) 转换类
     * 映射至数据库JSON类型
     *
     * [
     *     "爱情" ，
     *     “纯爱” ，
     *     “都市” ，
     *     “少女”
     * ]
     */
    @Convert(converter = ListAndJSON.class)
    private List<Object> tag;//标签

    /**
     * 提取转化，用泛型进行Object和JSON的映射。
     */
    private String authors;//作者
    private List<User> getAuthors(){
        if (this.authors == null){return Collections.emptyList();}
        return GenericAndJson.jsonToObject(this.authors, new TypeReference<List<User>>(){});
    }
    private void setAuthors(List<User> users){
        if (users.isEmpty()){return;}
        this.authors = GenericAndJson.objectToJson(users);
    }



}
